<?php
/**
 * 菜单相关接口
 * Created by PhpStorm.
 * User: LRChang
 * Date: 2018/6/14
 * Time: 10:33
 * Mail: hjklrchang@qq.com
 */

namespace app\adminapi\controller;

use app\adminapi\model\Role;
use app\adminapi\validate\MenuValidate;

/**
 * @name【菜单管理】
 * @baseurl【adminapi/Menu】
 * @file【Menu.php】
 */
class Menu extends Base {
    /**
     * @name【菜单树形结构列表】
     * @desc【菜单树形结构列表】
     * @uri【menuList】
     * @method【post】
     * @param【
     * module_type $ int $ 1 $ 所属模块类型，0:传统模块,1:api模块  #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * tree $ json $ $ 菜单树形结构 #
     * description $ json $ $ 接口说明
     * 】
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function menuList(){
        // 校验请求参数
        $validate = new MenuValidate();
        // 获取所有请求参数
        $params = $validate->scene('list')->goCheck()->getCurrentData();
        $module_type = isset($params['module_type']) ? $params['module_type'] : null;

        $tree = ( new Role() )->getRoleMenusTree($this->session['user']['role_id'], $module_type);

        return $this->retSucc(['tree' => $tree]);
    }

    /**
     * @name【新增菜单】
     * @desc【新增菜单】
     * @uri【add】
     * @method【post】
     * @param【
     * name $ string $ xx菜单 $ 菜单名称 $ 1 #
     * pid $ int $ 1 $ 父级id $ 1 #
     * url $ string $  /adminapi/menu/index $ 菜单地址 $ 1 #
     * icon $ string $  $ 图标  #
     * sort $ int $ 10 $ 排序  #
     * state $ int $ 1 $ 状态，1:可用,9:禁用 $ 1 #
     * module_type $ int $ 1 $ 所属模块类型，0:传统模块,1:api模块 $ 1 #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * id $ int $ 1 $ 新增成功的菜单ID#
     * 】
     * @throws \app\base\exception\RecordNotFoundException
     * @throws \think\exception\DbException
     */
    public function add(){
        // 校验请求参数
        $validate = new MenuValidate();
        // 获取所有请求参数
        $params = $validate->scene('add')->goCheck()->getCurrentData();

        $menu = (new \app\adminapi\model\Menu()) ->createOrUpdate($params);

        return $this->retSucc(['id' => $menu->id]);
    }

    /**
     * @name【编辑菜单】
     * @desc【编辑菜单】
     * @uri【edit】
     * @method【post】
     * @param【
     * id $ int $ 10 $ 菜单ID $ 1 #
     * name $ string $ xx菜单 $ 菜单名称 $ 1 #
     * pid $ int $ 1 $ 父级id $ 1 #
     * url $ string $  /adminapi/menu/index $ 菜单地址 $ 1 #
     * icon $ string $  $ 图标  #
     * sort $ int $ 10 $ 排序  #
     * state $ int $ 1 $ 状态，1:可用,9:禁用 $ 1 #
     * module_type $ int $ 1 $ 所属模块类型，0:传统模块,1:api模块 $ 1 #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * updated $ int $  1 $ 更新记录条数#
     * 】
     * @throws \app\base\exception\RecordNotFoundException
     * @throws \think\exception\DbException
     */
    public function edit(){
        // 校验请求参数
        $validate = new MenuValidate();
        // 获取所有请求参数
        $params = $validate->scene('edit')->goCheck()->getCurrentData();

        $result = (new \app\adminapi\model\Menu()) ->createOrUpdate($params);

        return $this->retSucc(['updated' => $result]);
    }

    /**
     * * @name【删除菜单】
     * @desc【删除菜单】
     * @uri【delete】
     * @method【post】
     * @param【
     * ids $ int $ 1 $ 菜单ID，多个请用','号连接 $ 1 #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * deleted $ int $  1 $ 删除的记录条数#
     * 】
     * @return mixed|\think\response\Json|void
     * @throws \app\base\exception\BaseException
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function delete(){
        // 校验请求参数
        $validate = new MenuValidate();
        // 获取所有请求参数
        $params = $validate->scene('delete')->goCheck()->getCurrentData();

        $user = new \app\adminapi\model\User();
        $session = $user->getLoginUser();
        $user->checkAdminAuth($session, \app\adminapi\model\User::AUTH_SCOPE_SUPER_ADMIN);

        $result = (new \app\adminapi\model\Menu())->deleteMenus($params['ids']);

        return $this->retSucc(['deleted' => $result]);
    }
}